﻿package com.tangrong.filesystem;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.tangrong.filesystem.visitor.Visitor;

public abstract class File{
	
	protected Logger logger = LoggerFactory.getLogger(this.getClass().getName());
	
	protected String name;
	
	protected List<Link> links;
	
	public File(){
		links = new ArrayList<Link>();
	}
	
	public File(String name){
		this.name = name;
		links = new ArrayList<Link>();
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	/**
	 * @param node
	 * 组合模式中，在文件（夹）中添加子文件（夹）
	 */
	public abstract void addFile(File node);
	
	/**
	 * @param node 
	 * 组合模式中，从文件（夹）中删除子文件（夹）
	 */
	public abstract void removeFile(File node);
	
	/**
	 * @param v ：访问者类
	 * 访问者模式：接受访问者
	 */
	public abstract void accept(Visitor v);
	
	/**
	 * 观察者模式、代理模式：添加链接
	 */
	public void addLink(Link link){
		this.links.add(link);
	}
	
	/**
	 * @param link
	 * 观察者模式、代理模式：删除链接
	 */
	public void removeLink(Link link){
		this.links.remove(link);
	}
	
	/**
	 * 观察者模式：方法内部调用notifyObservers（）；
	 */
	public abstract void doSomething();
}
